package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.AlbumMapper;
import cn.tedu.csmall.product.pojo.dto.AlbumAndNewDTO;
import cn.tedu.csmall.product.pojo.entity.Album;
import cn.tedu.csmall.product.pojo.vo.AlbumListitemVO;
import cn.tedu.csmall.product.pojo.vo.AlbumStandardVO;
import cn.tedu.csmall.product.service.IAlbumService;
import cn.tedu.csmall.product.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;

@Slf4j
@Service
public class AlbumServiceImpl implements IAlbumService , ServiceCode {
    //自动装配AlbumMapper
    @Autowired
    private AlbumMapper albumMapper;

    public AlbumServiceImpl() {
        log.info("创建业务类:AlbumServiceImpl");
    }

    @Override
    public void addNew(AlbumAndNewDTO albumAndNewDTO) {
        log.debug("开始处理【添加相册】的业务，参数：{}",albumAndNewDTO);
        //调用AlbumMapper对象的 int countByName(String name)方法统计此名称的相册的数量
          String name=albumAndNewDTO.getName();
        int countByName= albumMapper.contByName(name);
        log.debug("尝试添加相册名称是:{}，在数据库名称的相册数量为：{}",name,countByName);
        //判断统计结果是否等于1
        if (countByName>0){
            //是:相册名称已汆存在,抛出异常RuntimeException异常
            String message="添加相册失败！相册名册【"+name+"】已存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
        //获取当前系统时间:LocalDateTime now=LocalDateTime.now()
        LocalDateTime now=LocalDateTime.now();
        //创建Album对象
        Album album=new Album();
        //补全Album对象中的个属性值:name :来之参数
        //补全Album对象中的个属性值:description :来之参数
        //补全Album对象中的个属性值:sort :来之参数
        BeanUtils.copyProperties(albumAndNewDTO,album);
        //补全Album对象中的个属性值:gmtCreate :now
        album.setGmtCreate(now);
        //补全Album对象中的个属性值:gmtModified :now
        album.setGmtModified(now);
        //调用AlbumMapper对象的int insert(Album album)方法插入数据
        log.debug("即将向数据库中插入数据：{}",album);
        int row=albumMapper.insert(album);
        //判断插入数据时受到影响行数是否有误！
        if (row!=1){
            String message="添加相册失败！服务器忙，请稍后再一次尝试!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_INSERT,message);
        }
    }
    @Override
    public void delete(Long id) {
       log.debug("开始处理【删除相册】的业务，参数{}",id);
        AlbumStandardVO album = albumMapper.getAlbum(id);
        log.debug("尝试删除数据库相册数据，相册id：{}，删除数据：{}",id,album);
        if (album==null) {
            String message="删除相册失败，该相册id:"+id+"不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
         int row= albumMapper.delete(id);
         if(row!=1){
             String message="删除相册失败！服务器忙，请稍后再一次尝试!";
             log.debug(message);
             throw new ServiceException(ServiceCode.ERR_DELETE,message);
         }

    }

    @Override
    public List<AlbumListitemVO> listAlbum() {
        log.debug("开始处理【查询业务】");
        List<AlbumListitemVO> albumList = albumMapper.listAlbum();
        if (albumList.isEmpty()){
            String message="你所查询的数据不存在！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        return albumList;
    }

    @Override
    public AlbumStandardVO getAlbum(Long id) {
        log.debug("开始处理【查询业务】");
        AlbumStandardVO album = albumMapper.getAlbum(id);
        if (album == null){
            String message="你所查询的数据不存在！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        return album;
    }
}
